Snes9X v0.24 Final Released 31th October 1997 -------------------------------------- Main Authors ------------ Gary Henderson (gary@daniver.demon.co.uk) Jerremy Koot a.k.a. The Teacher (jkoot@euronet.nl) Platform Porters ---------------- Chad Kitching a.k.a. Trepalium (kitchingc@mail.techplus.com) John Stiles (jstiles@uclink4.berkeley.edu) Jeremy Shear (jeremy@netzone.com) Gary Henderson (gary@daniver.demon.co.uk) Jerremy Koot a.k.a. The Teacher (jkoot@euronet.nl) Contents -------- Final Version Introduction Key Features What's New What's Missing What You Will Need Getting Started/Command Line Options Keyboard Controls Joystick Support Problems With ROMs Sound Problems Converting ROM Images Speeding up the Emulation Known problems Credits Final Version ------------- Jerremy Koot's offical statement: Let let me start with saying that Snes9X has been the greatest project that I have working on ever ! It was fun to do and every time I went to #EMU I knew why I was doing it... But all of this has ended.... Due to several reasons Snes9X can't continue... One is a possible claim of Nintendo... But you probably all think that that's the main reason, it isn't... Another reason is getting fucked over by other people, this is probably a more important reason... And then there is one more reason which, due to circumstances I can't even explain... But all in all, I would like to thank all the users for the great support, I've been reading several web pages and see that Snes9X is said to be either the best and/or the most used emulator on the World... This does make me smile from deep down inside... Seeing that since 5 Juli 1997 I had 500.000 hits probably proves that it was/is used a lot, with the latest dos version getting 14.000 hits in two days, not even counting the number of times it was downloaded from other sites, shows how much people loved Snes9X.... So to all the Snes9X users: THANK YOU, IT WAS GREAT ! A small note for all the developers out there who see a chance in getting the Snes9X source, we will not give it away ! So don't mail me or Gary about it ! If you want to do something for the SNES emulation 'scene', then help authors like zsKnight, _Demo_, Lord Esnes, NLKSnes, etc. And to all those emulation wannabe's, if you think you can program an emulator, just start and see where it leads, because maybe you'll have your own Snes9X ! Jerremy Koot One of the author's of Snes96, Snes97 and Snes9X. Introduction ------------ Snes9X is coded in C++ with an assembler CPU emulation core on the Linux and MS-DOS ports. It is a spare-time project being written by Gary Henderson and Jerremy Koot. This read-me file describes the MS-DOS port of Snes9x, a freeware Super Nintendo Entertainment System (SNES) emulator. Other ports are available: Jerremy Koot works on the Windows 95 port, Gary Henderson maintains the Linux i386 and Sun Solaris ports and John Stiles and Jeremy Shear work on the Mac port. I'm afraid I cannot answer any more e-mails about this emulator. I will not be updating it, because the Snes9X project has been terminated, so don't bother sending bug reports, suggestions, or anything else. If you're looking to contact me for some other reason, you can e-mail me at kitchingc@mail.techplus.com, for job offers, whatever. Key Features ------------ o A user-friendly user interface in the DOS and Windows ports o Speed: Snes9x now gives NLKSNES, formally the the fastest SNES emulator, a run for its money, while being more compatible, supporting sound and have more features. Also, many parts of Snes9x are still in C++; more speed could be gained be rewriting other parts of the emulator in assembler. NLKSNES is already written in assembler. Many games now play full speed on a P100 WITH SOUND will only a frame skip of one. o 16-bit, digital stereo sound on all ports. o Two screen refresh methods, an accurate, but slower mode and a much faster tile-based mode which now has all the features of the line-by-line code, except mosaic and window effects. o Multiple screen mode supported on the Linux S-VGA and MS-DOS ports. o Simultaneous two SNES joy-pad emulation allowing two player games to be played. o Lots of ROMs work, the numbers are increasing with each release (slowly). o Cheat functions, now including both RAM-patch and code-based cheats. o Support for one 2, 4 or 6 button joystick or two 2-button joysticks - Linux and MS-DOS ports only. o Snapshot a game in progress and restore the game to that exact point at a later time. o Complete, fast mode 7 emulation (screen rotation and scaling) - all except one rarely used feature. o Complete H-DMA emulation for those split screen and wavy background effects. o Background clip windows for those shaped H-DMA zoom effects. o Mosaic effect. o Compressed and/or split ROM image support. o SNES image scaling. o 8-bit, 16-bit and 24-bit X11 server support. o An uncrackable binary - mainly because it has no protection to crack such as time limits, limited colours, etc., etc. and never will. What's New ---------- Snes9X 0.24 ----------- - Fixed reading of DMA register values - now Ms Pacman works. - Saved sprite memory address being restored on the wrong scanline - caused corrupt sprites on at least one game (GANBARE GOEMON 2). - Screen colour palette not being updated if ROM only wrote to low byte of palette register. - Possible memory corruption fixed if a ROM tried to write to an invalid sprite address via PPU registers. - X11 port support quick load and save by pressing function keys to load or shift + function keys to save. - Fixed tile-mode offset and mosaic bugs Snes9X 0.23 ----------- - Added option to disable graphic window effects - T2: The Arcade Game doesn't seem to like them. - Mode 7 "outside screen area" register interpretation fixed - now the Actraiser map screen looks a lot better. - Old DMA code hack for Battle Toads: Double Dragon removed as it was no longer required and it was causing problems for Ys III. - Lowered max volume level of 16-bit sound mixing code to help with sound clipping problems is lots of SNES sound channels are playing. Snes9X 0.22 ----------- - Crash bug fixed in mode 7 graphics windows code Snes9X 0.21 ----------- - Fixed a noise channel volume bug - noise waveform was getting clipped. - Fixed 24bit X Window System server support on the Solaris port. - Sprites in priority level 1 on mode 7 were being drawn incorrectly behind graphics screen. - BG 3 priority 1 tiles sometimes not drawn dependant on the $2105 bit 3 setting. - Added graphic window support the tile redraw code. - Added mosaic support to tile redraw code. - Tile redraw code was drawing one line too many on screen-splits. - Tile-based redraw code made more inteligent about when a background should be displayed or not. - Added wrap within back support to large DMAs just to support Rock 'n' Roll racing. Snes9X v0.2 ----------- - C++ and assembler CPU emulations rewritten with many speed improvements. - SPC700 emulation speeded up and partially rewritten in assembler. - Line-by-line graphics code rewritten for more speed - still have lots more ideas on how to improve speed further. - Tile-based graphics code rewritten for a major speed increase, and its features extended to support all those in the line-based code except for mosaic and graphic window effects. - Tile-based graphics code now the default redraw method. - DMA code rewritten for speed - really helps ROMs that make use of a lot of DMA. - Mode 7 screen rotation code rewritten for a major speed increase. Also, several scrolling offset bugs fixed. - Several sound code fixes and speed ups. - LoROM S-RAM memory map bug fixed. Now Uniracers works plus several others. - V-RAM reading bug fixed. This fixed at least three ROMs that I know of. - Variable-cycle length emulation removed as a fixed-length cycle emulation was faster to implement. Unfortunately, this has broken compatibility with several ROMs which I'll try and fix soon. - Auto-frame rate adjust can now be turned on and off using the +/- keys. - RAM-patch cheat engine ported from snes97 to snes9x - Nice new user interface in the MS-DOS port. - Snes9X.INI file for storage of defaults Snes9X v0.131, v0.13 -------------------- - Due to big errors, I've discarded most of the changes from this release, and reimplemented a few of them a little better in 0.20 Snes9X v0.12 ------------ - Auto-frame rate adjust to keep a constant game and music speed - idea from Bloodlust (thanks). - Sound state now saved and restored in snapshot files. - Pro Action Reply, Game Genie(TM) and Gold Finger cheat code support. - Added long name forms of all the command line switches. - Added option to disable a few "internal" speed up hacks that caused problems for some games with sound enabled - e.g. Super Off Road Racing. - Sound code rewritten to help support a group of ROMs that spool sound data between the two the CPUs in real-time, although I'm still having timing problems with these ROMs. - Fixed memory locking problem on the MS-DOS port. It was effectively preventing virtual memory from working, causing problems for people with limited RAM. - A few more sound fixes. - Speed ups to the tile-based redraw code. Snes9X v0.1 ----------- - Sound support on all ports. - The name has changed! - Multiple SPC700 CPU emulation fixes and several sound DSP fixes - many more ROMs work with sound enabled. - Added fix for ROMs that re-use sprites during the same frame. - Fixed bug I accidentally added to Allegro keyboard scanning code - now no more lock ups when Caps-lock or Pause pressed on DOS port. - Documented some extra keys and command line options that have always been there. - Asm CPU core speed ups. - Minor bug fix that helps Final Fantasy 3. - Added code to help some games that use sub-screen addition/subtraction. The lack of sub-screen addition/subtraction shows itself as background 'priority' problems - now you don't have to toggle background layers on and off so often just to see hidden text, characters, or maps, etc. Use -L to enable. Toggle with '8' during a game to see if it makes a difference. Acts as a good intermediate solution until sub-screen addition/subtraction is actually implemented in a future release. - Made several bug fixes to the old, but faster tile-based drawing code (enabled by pressing '9') - now several more ROMs work with it enabled. - Modified sound skipper code - helps several ROMs that previously didn't work with the current selection of APU skippers. - Improved sound mixing code so volume is not attenuated so much, giving better results on 8bit sound cards. - Changed the frequency at which the joystick polling routine is called - now called every-other frame rather than every 3rd frame. - Recompiled Linux and DOS ports with the Pentium optimising version of gcc - gives a few percent speed increase (on a Pentium processor). - Fixed sprite priority bug with Mode 7 - apparently Final Fantasy 3 needs this. - Fixed a screen clipping problem with the Linux S-VGA mode. - Fixed bug that had crept in with -m 2 Linux S-VGA mode. - Fixed S-VGA Linux version with sound enabled. - Fixed #define problem that was stopping DOS snapshot saving from working. Coming Soon (What WAS planned) ----------- - GrIP support in MS-DOS - Control reconfigure in MS-DOS - GUI-based cheat code entry in MS-DOS - Linux and Solaris versions with a GUI. - Sub-screen addition/subtraction using a full 32000 colour screen mode - none of this simulate-in-256-colours rubbish. What's Missing -------------- Sub-screen addition and subtraction (used for transparency effects), offset change mode (no idea what its used for), sound pitch modulation and echo effects, pseudo 512 horizontal pixel mode and an interlaced display are all missing. Also, colour palette changes during the frame are not emulated correctly. A couple of other odd features that no ROMs seem to use are also missing. Some ROM cartridges contained additional hardware such as the SuperFX chip (a 16MHz RISC processor) or DSP chip, neither of these chips are emulated at the moment so games that use them like Mario Kart, DOOM, Yoshi's Island, etc. don't work. What You Will Need ------------------ The MS-DOS port requires a Pentium-class PC or higher running Linux with 16Mb or more of RAM and MS-DOS (or PC-DOS, DR-DOS, whatever) v3.30 or later. Snes9x will run under Windows 95 in a DOS box without a problem, although for more speed, you may want to run it in a true DOS session. For sound output in DOS, you need to have a 100% Sound Blaster compatible sound card. Beware: Some sound cards have very flaky Sound Blaster emulation. I can only guarantee that they should work on authentic Creative Labs Sound Blaster devices. Bare minimum Recommended Optimum Equipment ------------ ----------- ----------------- System: 80386SX Pentium-100 or better Pentium-200 or better Memory: 16MB 16MB 16MB Video: VGA SVGA VESA2 compliant SVGA Input: Keyboard Keyboard or joystick Keyboard or joystick Sound: None Sound Blaster 16 Sound Blaster 16 Be aware that the bare minimum is NOT a recommended minimum. Snes9x will be torture on a 386sx. Anything less than a 486dx2 should not be used, for purposes of preserving your sanity. Access to SNES ROM images in *.smc, *.sfc, *.fig or *.1, *.2, or sf32xxxa, sf32xxxb, etc., format will also help otherwise you will have nothing to run! Several public domain images are available from: http://www.rollanet.org/~khigh/emulator.htm Some commercial ROM images are available via the Internet. Please note, it is illegal in most countries to have commercial ROM images without also owning the actual SNES ROM cartridge. PLEASE DO NOT ASK JERREMY, GARY, MYSELF OR ANYONE ELSE ON THE SNES9X TEAM FOR ROM IMAGES OR FOR INFORMATION ON WHERE TO GET MORE, WE DO NOT KNOW AND WILL IGNORE ALL SUCH E-MAILS OR, IF WE ARE HAVING A PARTICULARLY BAD DAY, FORWARD THE E-MAIL TO THE EMULATOR ABUSE DATABASE. Getting Started --------------- From the dos prompt just type: snes9x ROM images are normally loaded from the directory .\roms. This can be changed by specifying a pathname with the image name or setting the environment variable SNES96_ROM_DIR to point to a different directory. You can also customize the directory by editing the snes9x.ini file to suit your preferences. In fact, I suggest using the .ini file over the environment variable, because under DOS, the environment space is very limited. Snapshot files and S-RAM save files are normally read from and written to the directory .\snesnaps. This can be changed by setting the environment variable SNES96_SNAPSHOT_DIR or editing the SnapshotPath in the snes9x.ini file to point to a different directory. Some command line flags are available: Sound options: -S or -sound (default: on) Enable sound CPU emulation and actual sound output. -NS or -nosound Disable sound CPU emulation and sound output, useful for the few ROMs where sound emulation causes them to lock up due to timing errors. -stereo (default: mono) Enable stereo sound output (requires more CPU power to implement) -r 0-7 or -soundquality 0-7 (default: 4) Sound playback rate/quality: 0 - disable sound, 1 - 8192, 2 - 11025, 3 - 16500, 4 - 22050 (default), 5 - 29300, 6 - 36600, 7 - 44000. Cheat options: -gg or -gamegenie Supply a Game Genie code for the current ROM. Up to 10 codes can be in affect at once. Game Genie codes for many SNES games are available from: http://game-genie.nvc.cc.ca.us/ Caution: Game genie codes seem a bit flaky yet when using them in snes9x. There may be an error in the decode process, or something. -ar or -actionreplay Supply a Pro-Action Reply code for the current ROM. Up to 10 codes can be in affect at once. At the moment, codes which alter RAM do not work. -gf or -goldfinger Supply a Gold Finger code for the current ROM. Up to 10 codes can be in affect at once. Speed up/slow down options: (See "Speeding Up The Emulation") -f or -frameskip (default: 4) Set this value to set the frame skip rate. Use a larger value faster emulation but more jerky movement and a smaller value for smooth but slower screen updates. Use '+' and '-' keys to modify the value during a game. -fauto Enables auto speed regulation. Makes the game and sound run at the correct speed, by stalling, or skipping frames based on the actual framerate. -ft